﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using TPTecnicas.MessageProcessor.Common;
using TPTecnicas.MessageProcessor.Business;
using System.ComponentModel.Composition;


namespace TPTecnicas.MessageProcessor.Rules
{
    public class EntregaTpRule : Rule
    {
        [ImportingConstructor]
        public EntregaTpRule([Import("context")]IUniversityContext context)
            : base(context)
        {

        }

        public override bool Validate(IMessage message)
        {
            var match = GetMatch(message);
            if (match.Success)
            {
                var numero = match.Groups["numero"].Value;

                if (!Context.UsuarioRegistrado(message.Sender))
                    throw new ApplicationException("Debe darse de alta primero.");

                if (message.Attachments.Count() == 0)
                    throw new ApplicationException("No existen archivos adjuntos.");

                //TODO invocar acciones
                return true;
            }

            if (message.Subject.Contains("ENTREGA-TP"))
            {
                //TODO
                //Sería útil, tener alguna estadistica de cuantos mails son recibidos y no matchean a una regla 
                //por lo que son rebotados, como para mejorar la regla o la explicación de la misma
            }

            return false;
        }

        protected override Match GetMatch(IMessage message)
        {
            var regex = new Regex(@"^\[ENTREGA-TP-(?<numero>\d+)\]$");
            return regex.Match(message.Subject);
        }
    }
}
